
//3306.元音辅音字符串计数II
class Solution {
    unordered_set<char> vowel;  //记录元音
public:
    //恰好包含K个辅音==至少包含K个辅音-至少包含K+1个辅音
    long long numMore(string str,int pos)
    {
        unordered_map<char ,int> num;  //记录区间中元音的类型及个数
        int n=str.size(),left=0;
        int conson=0;  //记录辅音的个数
        long long ret=0;
        for(int right=0;right<n;right++)
        {
            if(vowel.count(str[right])) num[str[right]]++;  //进窗口
            else conson++;
            while(left<=right&&num.size()==5&&conson>=pos)
            {
                if(vowel.count(str[left]))    //出窗口
                {
                    if(--num[str[left]]==0) 
                    num.erase(str[left]);
                }
                else conson--;
                left++;
            }
            ret+=left;  //更新答案
        }
        return ret;
    }

    long long countOfSubstrings(string word, int k) {
        vowel={'a','e','i','o','u'};
        return numMore(word,k)-numMore(word,k+1);
    }
};